Caching is an effective mechanism for increasing performance of processors by temporally storing system memory information for use and modification by the processors. A cache often increases in performance the closer it resides to execution units of a processor. In addition, the caches closer to execution units of a processor typically are smaller and quicker than larger higher-level caches.
However, a fundamental principle of caches is that the data cached is that, at least some of, the data cached is to be reused. Otherwise, a processor would always be accessing memory and the benefit of holding data next to a processor that is not reused would be lost. As an example, a trace cache may be included in a processor to hold decoded instruction traces. A trace cache is typically a fast and small cache utilized to improve performance (frontend and backend) and reduce power (power down decoders). However, contaminating caches with code that will not be reused reduces effectiveness, as space for reusable code is utilized.
Furthermore, optimizers may be included to optimize code. However, similar to the discussion above, execution cycles and power is often wasted on optimizing code that will not be reused.